/*
 * @Author: 阿芙
 * @Date: 2021-06-14 13:11:56
 * @LastEditTime: 2021-08-28 21:35:03
 * @LastEditors: Please set LastEditors
 * @Description: 
 * @FilePath: /RuoLing-SQL/lib/Drivers/DriversMYSQL.js
 */

//注入MYSQL模块
const mysql = require("mysql");

/**
 * @description: MYSQL驱动构造
 * @param {*} config 配置文件
 * @return {*}
 */
function DriversMYSQL(config){
    "use strict";
    this.config = config.value;
    this.pool = null;
    this.Init();
};


/**
 * @description: 初始化MYSQL数据源
 * @param {*}
 * @return {*}
 */
DriversMYSQL.prototype.Init = function(){
    "use strict";
    let _this = this;
    /**
     * 1、创建连接
     * 2、单列模式
     */
    if(_this.pool == null){

        _this.pool = mysql.createPool(_this.config);
    }

    return _this.pool;
};

/**
 * @description: 自动使用连接池的数据源连接，结束自动关闭连接
 * @param {*} sql
 * @return {*}
 */
DriversMYSQL.prototype.query = function(sql){
    "use strict";
    let _this = this;
    const SourceQuery = new Promise((resolve,reject)=>{
        _this.pool.query(sql,function(err,result){
            if(err){
                reject(err);
                return;
            }
                resolve(result);
                return;
        });
    });

    return SourceQuery;
};

/**
 * @description:使用连接池连接可以更容易地共享某个连接，也可以管理多个连接  
 * 一个连接，可以执行多次SQL再进行关闭 
 * @param {*}
 * @return {*}
 */
DriversMYSQL.prototype.queryConnection = function(){
    "use strict";
    let _this = this;
    const Connection = new Promise((resolve,reject)=>{
        _this.pool.getConnection(function(err,conncetion){
            if(err){
                reject(err);
                return;
            }
                resolve(conncetion);
                return;
        });
    });
    return Connection;
};


/**
 * @description: 关闭数据连接池
 * @param {*}
 * @return {*}
 */
DriversMYSQL.prototype.close = function(){
    "use strict";
    let _this = this;
    _this.pool.end();
     
};

module.exports = DriversMYSQL;